package controller;

import java.util.ArrayList;
import java.util.List;

import model.Area;
import model.ItemComanda;
import model.Plato;
import beans.itemComandaBean;
import dao.HibernateItemComandaDAO;
import dto.itemComandaDTO;

public class AdministradorItemComanda {
	private static AdministradorItemComanda instancia;
	
	private AdministradorItemComanda(){
		
	}
	
	public static AdministradorItemComanda getInstancia(){
		if(instancia==null)
			instancia=new AdministradorItemComanda();
		return instancia;
	}

	public List<itemComandaBean> fromModelTOBean(List<ItemComanda> items) {
		List<itemComandaBean> itemsComandaBean=new ArrayList<itemComandaBean>();
		for (ItemComanda itemComanda : items) {
			itemComandaBean itemBean=new itemComandaBean();
			itemBean.setIdItemComanda(itemComanda.getId());
			itemBean.setCantidad(itemComanda.getCantidad());
			itemBean.setPlato(AdministradorArea.getInstancia().getPlato(itemComanda.getPlato()));
			itemBean.setEstado(itemComanda.getEstado());
			itemsComandaBean.add(itemBean);
		}
		return itemsComandaBean;
	}

	public List<ItemComanda> fromDTOTOModel(List<itemComandaDTO> itemsComandaDTO) {
		List<ItemComanda> itemsComanda=new ArrayList<ItemComanda>();
		for (itemComandaDTO itemComandaDTO : itemsComandaDTO) {
			ItemComanda item=new ItemComanda();
			item.setId(itemComandaDTO.getId());
			item.setCantidad(itemComandaDTO.getCantidad());
			item.setPlato(AdministradorPlato.getInstancia().fromDTOTOModel(itemComandaDTO.getPlato()));
			item.setEstado(itemComandaDTO.getEstado());
			itemsComanda.add(item);
		}
		return itemsComanda;
	}
	
	public List<itemComandaDTO> fromModelTODTO(List<ItemComanda> itemsComanda) {
		List<itemComandaDTO> itemsComandaDTO=new ArrayList<itemComandaDTO>();
		for (ItemComanda itemComanda : itemsComanda) {
			itemComandaDTO itemDTO=new itemComandaDTO();
			itemDTO.setId(itemComanda.getId());
			itemDTO.setCantidad(itemComanda.getCantidad());
			itemDTO.setPlato(AdministradorPlato.getInstancia().fromModelTODTO(itemComanda.getPlato()));
			itemDTO.setEstado(itemComanda.getEstado());
			itemsComandaDTO.add(itemDTO);
		}
		return itemsComandaDTO;
	}

	public List<ItemComanda> fromBeanTOModel(List<itemComandaBean> itemsComandaBean) {
		List<ItemComanda> itemsComanda=new ArrayList<ItemComanda>();
		for (itemComandaBean itemComandaBean : itemsComandaBean) {
			ItemComanda item=new ItemComanda();
			item.setId(itemComandaBean.getIdItemComanda());
			item.setCantidad(itemComandaBean.getCantidad());
			Plato plato=AdministradorPlato.getInstancia().fromBeanTOModel(itemComandaBean.getPlato());
			item.setPlato(plato);
			item.setEstado(itemComandaBean.getEstado());
			itemsComanda.add(item);
		}
		return itemsComanda;
	}

	public ItemComanda buscarItemComanda(ItemComanda itemcomanda) {
		itemComandaBean item=new itemComandaBean();
		item.setIdItemComanda(itemcomanda.getId());
		item=HibernateItemComandaDAO.getInstancia().buscarItemComanda(item);
		Area area=AdministradorArea.getInstancia().fromBeanTOModel(item.getPlato().getArea());
		ItemComanda itemC=fromBeanTOModel(item);
		itemC.getPlato().setArea(area);
		return itemC;
	}
	
	public ItemComanda fromBeanTOModel(itemComandaBean itemComandaBean) {
		ItemComanda item=null;
		if(itemComandaBean!=null){
			item=new ItemComanda();
			item.setId(itemComandaBean.getIdItemComanda());
			item.setCantidad(itemComandaBean.getCantidad());
			Plato plato=AdministradorPlato.getInstancia().fromBeanTOModel(itemComandaBean.getPlato());
			item.setPlato(plato);
			item.setEstado(itemComandaBean.getEstado());
		}
		return item;
	}

	public itemComandaDTO fromModelTODTO(ItemComanda itemcomanda) {
		itemComandaDTO itemDTO=null;
		if(itemcomanda!=null){
			itemDTO=new itemComandaDTO();
			itemDTO.setId(itemcomanda.getId());
			itemDTO.setCantidad(itemcomanda.getCantidad());
			itemDTO.setPlato(AdministradorPlato.getInstancia().fromModelTODTO(itemcomanda.getPlato()));
			itemDTO.setEstado(itemcomanda.getEstado());
		}		
		return itemDTO;
	}
}
